home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 1 (Walnut Creek)
/
Aminet - June 1993 [Walnut Creek].iso
/
aminet
/
dev
/
m2
/
menugadget.lha
/
MenuGadget.def
next >
Wrap
Text File
|
1993-01-29
|
6KB
|
134 lines
DEFINITION MODULE MenuGadget;
(* MenuGadget.def - Prozeduren zur Benutzung des neuen Menu-Gadget.
* Version : 1.01 (29.01.93)
* Compiler : M2Amiga V4.107d
* Aufruf : m2c -zyne+@
* Copyright: © 1993 by Fin Schuppenhauer
*
* Dieses Modul stellt zwei Prozeduren zur Erzeugung und Handhabung
* eines Menu-Gadgets zur Verfügung. Ein Menü-Gadget ist ein Button-
* Gadget, aus dem ein Menü hervorklappt, sobald es selektiert wurde.
* In diesem Menü kann nun mit dem Mauszeiger durch die Einträge
* gefahren werden. Ein Eintrag wird mit der linken Maustaste (also
* nicht die Menütaste wie von Intuition gewohnt!) ausgewählt.
* Wurde irgendwo außerhalb des Menüs geklickt, so wird der Wert
* ITEM_NOSELECTION zurückgegeben, sonst die Nummer des Eintrags (mit
* 0 beginned).
* Ein MenuGadget wird mit der Prozedur SetMenuGadget() erzeugt.
* Als Rückgabewert erhält man einen Zeiger auf ein (Button-)Gadget.
* Wurde dieses Gadget vom Anwender selektiert, ist die Prozedur
* HandleMenuGadget() aufzurufen. Sie erzeugt das Menü und überwacht
* den Selektionsvorgang und liefert schließlich die Nummer des ge-
* wählten Eintrags.
* Das beigefügte Beispielprogramm MenuGadgetDemo demonstriert die
* korrekte Verwendung der Prozeduren.
*
* Dieses Programm ist SHAREWARE. Wenn es Dir gefällt und Du es
* häufiger benutzt (bzw. die hier zur Verfügung gestellten Prozeduren
* in eigene Programme einbaust), dann sende bitte eine kleine
* Entschädigung (mindestens eine Postkarte) an die folgende Adresse:
*
* Fin Schuppenhauer
* Braußpark 10
* 2000 Hamburg 26
*
* Für Kritik, Fehlerberichte und Verbesserungsvorschläge danke ich
* im vorraus.
*
* Zu diesem Programm gehören folgende Dateien:
*
* ° MenuGadget.def (diese Datei)
* ° MenuGadget.mod
* ° MenuGadget.sym
* ° MenuGadget.obj
* ° MenuGadget.readme
* ° MenuGadgetDemo.mod
* ° MenuGadgetDemo
*
* Diese Dateien liegen entweder in dieser Form oder gepackt als
* MenuGadget.lzh-File vor.
*
* SIE DÜRFEN NICHT VERÄNDERT WERDEN (wenn nicht anderes erklärt wird)
* UND NUR KOMPLETT ÜBER ELEKTRONISCHEN WEGE ODER AUF PUBLIC DOMAIN
* DISK WEITERGEGEBEN WERDEN. IN BEIDEN FÄLLEN DARF DIE UNKOSTENPAU-
* SCHALE NICHT DM 5.- ÜBERSCHREITEN.
* FÜR DIE FUNKTIONSFÄHIGKEIT DER PROGRAMME SOWIE MÖGLICHE SCHÄDEN
* BEI DEREN BENUTZUNG WIRD KEINE GARANTIE ÜBERNOMMEN.
*
* Soft- und Hardware-Voraussetzungen:
*
* ° Amiga xxxx mit mindst. OS2.04
* ° Modula-2 Compiler M2Amiga mindst. V4.0
*
* Bekannte Fehler:
* - keine
*
* Offene Wünsche:
* - Gibt es die Möglichkeit, die Prozedur HandleMenuGadget() so
* ins System einzubinden, daß sie automatisch bei der Betätigung
* des Gadgets aufgerufen wird und praktisch eine eigene
* IntuiMessage erzeugt, also ein wirklich neues Gadget darstellen
* würde ?
* - Wär doch ganz nett, wenn dieser Gadget-Typ in der nächsten
* Betriebssystemversion vorhanden wäre, oder? Wie stehen die
* Entwickler von Commodore-Amiga dazu?
*
* Wie kam es überhaupt zu diesem Programm ?
* An der Uni arbeite ich viel auf SPARC-Workstations unter
* OpenWindows. Eben dort werden diese "Gadget-Menüs" zu hauf
* verwendet. Da ich das für ein gutes, bedienerfreundliches
* Feature hielte, machte ich mich an die Implmentation auf dem
* (doch besseren) Amiga.
*
* "VER$ MenuGadget.def V1.0 (27.01.93)"
*)
(*---------------------------------------------------------------------------*)
IMPORT id:IntuitionD,
gd:GadToolsD,
ud:UtilityD;
TYPE StrPtr = POINTER TO ARRAY [0..127] OF CHAR;
CONST MENUGADGET_KIND = 42;
PROCEDURE SetMenuGadget (
kind : LONGCARD; (* Always use MENUGADGET_KIND *)
VAR previous : id.Gadget;
VAR ng : gd.NewGadget;
taglist : ud.TagItemPtr) : id.GadgetPtr;
(* Diese Prozedur erzeugt das MenuGadget. Sie sieht nicht nur so
* ähnlich aus, wie CreateGadgetA() aus GadToolsL, sondern verhält
* sich auch ähnlich. Für die Verwendung der Parameter gilt das
* gleiche, wie für CreateGadgetA(). Intern wird dieser Aufruf in
* die Erzeugung eines genericKind-Gadgets umgewandelt und danach
* die notwendigen Ergänzungen hinzugefügt.
* Alle Einträge der NewGadget-Struktur haben die normale, gleiche
* Bedeutung, bis auf zwei Ausnahmen: Die Menge zur Plazierung eines
* möglicherweise vorhandenen Textes muß aus Kompatibilitätsgründen
* leer sein und userData ist ein Zeiger auf ein Array mit den
* StrPtr der Zeichenketten, die die Einträge des Menüs darstellen.
* Das Beispielprogramm MenuGadgetDemo demonstriert die Verwendung
* der Prozeduren.
*)
CONST ITEM_NOSELECTION = -42; (* no item selected *)
ITEM_CREATIONERR = -2; (* couldn't create menu *)
ITEM_ERROR = -3; (* other error, not supported *)
PROCEDURE HandleMenuGadget (
mg : id.GadgetPtr; (* must point to the menu-gadget *)
win : id.WindowPtr) (* on wich the menu-gadget is placed *)
: LONGINT; (* number of the selected item *)
(* Wurde das MenuGadget selektiert, sollte diese Prozedur aufgerufen
* werden. Sie erzeugt das Menü und überwacht den Selektionsvorgang
* und liefert schließlich die Nummer des Eintrags (beginned bei 0)
* oder einen der oben definierten Codes.
*)
END MenuGadget.